/*
  学习目标：多泛型变量
  总结：
    1. 多变量的使用，🔔<T, K>(aa: T, bb: K)
    2. 多变量之间添加约束条件
*/

// 练习1
function fn<T, K>(a: T, b: K): { name: T; age: K } {
  return {
    name: a,
    age: b,
  };
}

const result = fn(1, '2');
const result2 = fn([1], { zs: '123' });

// 练习2 - 变量间添加约束条件
function getValueByName<T, K extends keyof T>(obj: T, name: K): T[K] {
  return obj[name];
}

// // 期望：为函数添加类型，
// // 效果：第二个参数能限定取值范围
const res1 = getValueByName({ name1: 'zs', age1: 18 }, 'name1'); // 期望约束第二个参数：取出参数1中的键名
const res2 = getValueByName({ name2: 'zs', age2: 18 }, 'age2'); // 期望约束第二个参数：取出参数1中的键名
const res3 = getValueByName({ name3: 'zs', age3: 18 }, 'age3'); // 期望约束第二个参数：取出参数1中的键名
